#pragma once

#include <map>
#include "HashedString.h"

typedef HashedString UniformID;
typedef unsigned int UniformCount;
typedef void* UniformLocation;

typedef std::pair<UniformCount, UniformLocation> CountLocationPair_t;
typedef std::pair<UniformID, CountLocationPair_t> UniformCountLocationPair_t;
typedef std::map<UniformID, CountLocationPair_t> UniformCountLocationMap_t;

class UniformInstruction
{
public:
	virtual const HashedString& Type() = 0;
};

typedef std::pair<UniformCount, Pointer<UniformInstruction>> CountInstructionPair_t;
typedef std::pair<UniformID, CountInstructionPair_t> UniformCountInstructionPair_t;
typedef std::map<UniformID, CountInstructionPair_t> UniformCountInstructionMap_t;